package com.shundr.user.dao;

import java.sql.SQLException;
import java.util.List;
import java.util.concurrent.Callable;

import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.DeleteBuilder;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.UpdateBuilder;
import com.shundr.frame.db.LDaoManager;
import com.shundr.frame.util.LLogger;
import com.shundr.user.model.UserInfo;
/**
 * userDao
 * UserDao
 * 
 * @author larry 2015-4-10 下午3:02:24 
 * @version 1.0.0
 *
 */
public class UserDao {
	
	private Dao<UserInfo, Integer> userDao;
	
	public UserDao() {
		userDao = LDaoManager.createDao(UserInfo.class);
	}
	
	/**
	 * 
	 * insert(这里用一句话描述这个方法的作用) 插入用户
	 * (这里描述这个方法适用条件 – 可选)
	 * @param userInfo void
	 * @exception
	 * @since  1.0.0
	 */
	public void insert(UserInfo userInfo){
		try {
			UpdateBuilder<UserInfo, Integer> builder = userDao.updateBuilder();
			builder.updateColumnValue("userId", userInfo.getUserId());
			if(builder.update() == 0){//没有此用户
				userDao.create(userInfo);
			}
		} catch (SQLException e) {
			LLogger.e("创建数据类型时异常" + e);
		}
	}
	
	/**
	 * 更新用户电话
	 * updateUserPhone(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param userId
	 * @param userPhone
	 * void
	 * @exception
	 * @since  1.0.0
	 */
	public void updateUserPhone(int userId,String userPhone){
		try {
			UpdateBuilder<UserInfo, Integer> updateBuilder=userDao.updateBuilder();
			updateBuilder.where().eq("userId", userId);
			updateBuilder.updateColumnValue("userPhone", userPhone);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 删除用户
	 * delete(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param info void
	 * @exception
	 * @since  1.0.0
	 */
	public void delete(final UserInfo info){
		try {
			DeleteBuilder<UserInfo, Integer> deleteBuilder = userDao.deleteBuilder();
			deleteBuilder.where().eq("userId", info.getUserId());
			deleteBuilder.delete();
		} catch (SQLException e) {
			LLogger.e("删除用户时发生异常 ： " + e);
		}
	}
	
	/**
	 * 根据Token获取用户信息
	 * getUserByToken(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param token
	 * @return
	 * UserInfo
	 * @exception
	 * @since  1.0.0
	 */
	public UserInfo getUserById(int userId){
		try {
			QueryBuilder<UserInfo, Integer> queryBuilder = userDao.queryBuilder();
			queryBuilder.where().eq("userId", userId);
			List<UserInfo> infos = queryBuilder.query();
			if(infos.size() > 0){
				return infos.get(0);
			}
			return null;
		} catch (SQLException e) {
			LLogger.e("根据userId查询用户时发生异常 ： " + e);
			return null;
		}
	}
	
	/**
	 * 
	 * syncData(这里用一句话描述这个方法的作用) 批量插入用户
	 * (这里描述这个方法适用条件 – 可选)
	 * @param infos
	 * void
	 * @exception
	 * @since  1.0.0
	 */
	public void syncData(final List<UserInfo> infos) {
		if(infos == null || infos.size() == 0)
			return;
		try {
			userDao.callBatchTasks(new Callable<Void>() {

				@Override
				public Void call() throws Exception {
//					userDao.deleteBuilder().delete();
					for(UserInfo info : infos) {
						userDao.create(info);
					}
					return null;
				}});
		} catch (Exception e) {
			LLogger.e("保存数据类型时发生异常 ： " + e);
		}
	}

}
